package com.bb.flow.config.node;

import com.bb.flow.api.FlowNode;
import com.bb.flow.config.AbstractConfigNode;
import com.bb.flow.config.ClassInfo;
import com.bb.flow.config.enumtype.NodeType;

/**
 * @author bigbeard
 * 业务功能类
 */
public class FunctionConfigNode extends AbstractConfigNode {
    private static final long serialVersionUID = 1L;
    /**
     * 业务类配置,必须要实现FlowNode接口
     */
    private ClassInfo classInfo;

    /**
     * 业务功能节点
     */
    private FlowNode flowNode;

    /**
     * 获取类配置信息
     *
     * @return 类配置信息
     */
    public ClassInfo getClassInfo() {
        return classInfo;
    }

    /**
     * 设置类配置信息
     *
     * @param classInfo 类配置信息,必须要实现FlowNode接口
     * @return 当前对象
     */
    public FunctionConfigNode setClassInfo(ClassInfo classInfo) {
        this.classInfo = classInfo;
        return this;
    }

    /**
     * 获取业务功能实现节点
     *
     * @return 业务具体实现节点, 可能为null
     */
    public FlowNode getFlowNode() {
        return flowNode;
    }

    /**
     * 设置业务功能节点,由配置文件来决定并创建对象
     *
     * @param flowNode 业务功能节点对象
     * @return 当前对象
     */
    public FunctionConfigNode setFlowNode(FlowNode flowNode) {
        this.flowNode = flowNode;
        return this;
    }

    /**
     * 节点类型
     *
     * @return 获取接点类型
     */
    @Override
    public NodeType getNodeType() {
        return NodeType.FUNCTION_NODE;
    }
}
